package com.henghong.CouponDemo.service.impl;

import com.henghong.CouponDemo.dto.UpdateCouponDTO;
import com.henghong.CouponDemo.eneity.CouponNoInfo;
import com.henghong.CouponDemo.exception.BaseException;
import com.henghong.CouponDemo.mapper.UpdateCouponMapper;
import com.henghong.CouponDemo.service.UpdateCouponService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

/**
 * 2025/03/03
 * 在updateCoupon if条件分支里面将抛出异常类型改为BaseException 通过全局异常处理器捕获异常 返回给前端页面
 */
@Service
public class UpdateCouponServiceImpl implements UpdateCouponService {

    @Autowired
    private UpdateCouponMapper updateCouponMapper;

    @Override
    public void updateCoupon(UpdateCouponDTO updateCouponDTO) {
        // 通过個別クーポンID查询ロック/削除信息
        CouponNoInfo couponNoInfo = updateCouponMapper.getLockDelete(updateCouponDTO.getEachCouponId());

        // 更新チェック
        // 更新前のロック/削除区分は「0：有効」、更新後のロック/削除区分は「0：有効」ではありませんの場合
        if (couponNoInfo.getLockDelete().equals("0") && !updateCouponDTO.getLockDelete().equals("0")) {
            if (couponNoInfo.getStatus().equals(0) || couponNoInfo.getStatus().equals(4)) {
                // ステータスは「0：準備」また「4：利用済み」の場合、エラー処理を行う。
                throw new BaseException("ERROR076: 準備中／利用済みのクーポンは更新できません。");
            } else if (couponNoInfo.getStatus().equals(3) && updateCouponDTO.getLockDelete().equals("2")) {
                // ステータスは「3：利用中」、更新後のロック/削除区分は「2：キャンセル」の場合
                throw new BaseException("ERROR077: 利用中のクーポンはキャンセルできません。");
            }
        }

        // 更新前のロック/削除区分は「1：ロック」、更新後のロック/削除区分は「1：ロック」ではありませんの場合
        if (couponNoInfo.getLockDelete().equals("1") && !updateCouponDTO.getLockDelete().equals("1")) {
            if (couponNoInfo.getStatus().equals(0) || couponNoInfo.getStatus().equals(4)) {
                // ステータスは「0：準備」また「4：利用済み」の場合、エラー処理を行う。
                throw new BaseException("ERROR076: 準備中／利用済みのクーポンは更新できません。");
            } else if (couponNoInfo.getStatus().equals(3) && updateCouponDTO.getLockDelete().equals("2")) {
                // ステータスは「3：利用中」、更新後のロック/削除区分は「2：キャンセル」の場合
                throw new BaseException("ERROR077: 利用中のクーポンはキャンセルできません。");
            }
        }

        // 更新前のロック/削除区分は「2：キャンセル」、更新後のロック/削除区分は「2：キャンセル」ではありませんの場合
        if (couponNoInfo.getLockDelete().equals("2") && !updateCouponDTO.getLockDelete().equals("2")) {
            throw new BaseException("ERROR078: キャンセルしたクーポンは更新できません。");
        }

        /**
         * 2025/03/03
         * 添加了画面没有选择有効かロックかキャンセルか时的异常处理
         */
        if (updateCouponDTO.getLockDelete() == null || updateCouponDTO.getLockDelete().isEmpty()) {
            throw new BaseException("有効かロックかキャンセルかを選択してください。");
        }


        // 更新操作
        try {
            updateCouponDTO.setLockUser("Bishukai");
            updateCouponMapper.update(updateCouponDTO);
        } catch (Exception e) {
            throw new BaseException("ERROR040: クーポンメンテナンス更新時にエラーが発生しました。");
        }
    }
}
